const express = require("express");
const { writeFileSync } = require("fs");
const { createServer } = require("http");
const { Server } = require("socket.io");

const app = express();

app.use('/upload', express.static('upload'))

const httpServer = createServer(app);
const io = new Server(httpServer, {
  cors: {
    origin: "*",
    allowedHeaders: "*",
    credentials: true
  }
});

let onlineUserSocket = []

// 在线群和用户 
let onlineUserList = {
  // "10086": [
  //   {
  //     socketId: SWERGFAEGRFBE345Y  
  //     room_id: "10086",
  //     user_img: "../img/7.jpg",
  //     user_name: "bmy",
  //     level: 1, // 1群主（第一个加群的人） 2管理员（群主右键设置的） 3普通成员（之后进入的）
  //   },
  //  {
  //     socketObject: socket  
  //     room_id: "10086",
  //     user_img: "../img/7.jpg",
  //     user_name: "bmy",
  //     level: 1, // 1群主（第一个加群的人） 2管理员（群主右键设置的） 3普通成员（之后进入的）
  //   }
  // ],
  // "10011": [
  //   {
  //     room_id: "10011",
  //     user_img: "../img/7.jpg",
  //     user_name: "bmy",
  //     level: 1,
  //   }
  // ]
}

// 聊天记录
let ChatRecords = {
  "10086": [
    {
      room_id: "10086",
      user_img: "../img/7.jpg",
      user_name: "bmy",
      timestamp: '1234564323456',
      level: 1, // 1群主（第一个加群的人） 2管理员（群主右键设置的） 3普通成员（之后进入的）
      message: '这是我发的消息'
    }
  ]
}

io.on("connection", (socket) => {
  console.log("链接成功...");


  // 加入群聊
  socket.on('JoinRoom', (msg) => {
    socket.roomId = msg.room_id

    // 已经存在了这个群
    if (onlineUserList.hasOwnProperty(msg.room_id)) {
      if (checkUserNameisExist(msg)) {
        msg.level = 3
        // msg.socket = socket
        onlineUserList[msg.room_id].push(msg)
      }

      msg.socketId = socket.id
      onlineUserSocket.push(socket)

      socket.join(msg.room_id);
      console.log("已经存在了这个群");
      // 不存在这个群  
    } else {
      onlineUserList[msg.room_id] = []
      msg.socketId = socket.id
      onlineUserSocket.push(socket)
      msg.level = 1


      onlineUserList[msg.room_id].push(msg)

      console.log(onlineUserList[msg.room_id]);


      socket.join(msg.room_id);
      console.log("不存在这个群");
    }

    io.in(msg.room_id).emit("onLineUserList", onlineUserList[msg.room_id]);
    io.in(msg.room_id).emit("WelcomeUser", `欢迎用户 ${msg.user_name} 加入群聊`);
  });

  socket.on('sendMessage', (msg) => {
    console.log("msg: ", msg);
    socket.to(msg.room_id).emit("ServerMessage", msg);
  })

  socket.on('uploadFile', (msg) => {
    console.log("图片base64: ", msg);
    msg.user.message = saveFile(msg)
    socket.to(msg.user.room_id).emit("uploadImgName", msg.user);
  })

  socket.on('socketShake', (msg) => {

    if (msg.hasOwnProperty("clickUserName")) {

      console.log("私发抖动");

      let userSocket = onlineUserSocket.filter(v => onlineUserList[msg.room_id].filter(v => msg.clickUserName == v.user_name)[0].socketId == v.id)[0];

      let a = parseInt(Math.random() * 100000)
      console.log("a: ", a);

      socket.join(a);
      userSocket.join(a)

      // console.log("socket: ", socket.id);
      // console.log("userSocket: ", userSocket.id);
     
      // console.log(socket.rooms);
      // console.log(userSocket.rooms);

      io.in(a).emit("ShakeMessage", msg);
      
      io.in(a).emit("openShake");

    } else {
      console.log("群发抖动");

      io.in(msg.room_id).emit("openShake");
      io.in(msg.room_id).emit("ShakeMessage", msg);
    }

  })



  socket.on("disconnect", (reason) => {
    socket.leave(socket.roomId);
  });


});


function saveFile(imgData) {
  var base64Data = imgData.base64.replace(/^data:image\/\w+;base64,/, "");
  var dataBuffer = Buffer.from(base64Data, 'base64');
  let fileName = `${new Date().getTime().toString() + (Math.random() * new Date().getTime())}.${imgData.fileType}`
  writeFileSync(`upload/${fileName}`, dataBuffer);
  return fileName
}



function checkUserNameisExist(msg) {
  let arr = onlineUserList[msg.room_id].filter(v => v.user_name == msg.user_name)
  return arr.length == 0 ? true : false
}

httpServer.listen(3000, () => {
  console.log("ws运行在: ws://127.0.0.1:3000");
});